const fs = require('fs');
const path = require('path');
const { generateUniqueFileName } = require('../common/utils');

const COS = require('cos-nodejs-sdk-v5');

// 上传腾讯云cos
const sendCos = async (ctx, next) => {
  // var request = require('request');
  // var COS = require('cos-nodejs-sdk-v5');
  // var cos = new COS({
  //   getAuthorization: function (options, callback) {
  //     // 初始化时不会调用，只有调用 cos 方法（例如 cos.putObject）时才会进入
  //     // 异步获取临时密钥
  //     request(
  //       {
  //         url: 'https://example.com/sts',
  //         data: {
  //           // 可从 options 取需要的参数
  //         },
  //       },
  //       function (err, response, body) {
  //         try {
  //           var data = JSON.parse(body);
  //           var credentials = data.credentials;
  //         } catch (e) {}
  //         if (!data || !credentials) return console.error('credentials invalid');
  //         callback({
  //           TmpSecretId: credentials.tmpSecretId, // 临时密钥的 tmpSecretId
  //           TmpSecretKey: credentials.tmpSecretKey, // 临时密钥的 tmpSecretKey
  //           SecurityToken: credentials.sessionToken, // 临时密钥的 sessionToken
  //           ExpiredTime: data.expiredTime, // 临时密钥失效时间戳，是申请临时密钥时，时间戳加 durationSeconds
  //         });
  //       }
  //     );
  //   },
  // });

  // var COS = require('cos-nodejs-sdk-v5');
  var cos = new COS({
    SecretId: 'AKIDukPq7btqpdIvOk4Zw67zfARWQAjFmZCp', // 推荐使用环境变量获取；用户的 SecretId，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
    SecretKey: 'd7iFevK2jQ7e2Kg9TfszzvXVMSlz9GUk', // 推荐使用环境变量获取；用户的 SecretKey，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
    // SecretId: 'AKIDTvEPZfjfjJpDar3DNLB5tgOzRlwumS8c',
    // SecretKey: 'Vp167ypYAh9Us7EDA6wgEh08AIVix9GP'
  });

  let files = ctx.request.files['file'];

  // cos
  //   .uploadFile({
  //     SecretId: 'AKIDukPq7btqpdIvOk4Zw67zfARWQAjFmZCp',
  //     SecretKey: 'd7iFevK2jQ7e2Kg9TfszzvXVMSlz9GUk',
  //     Bucket: 'test-oss-1257840043', // 存储桶名称
  //     Region: 'ap-nanjing',
  //     // Key: '1.zip',
  //     // FilePath: './1.zip', // 本地文件地址，需自行替换
  //   })
  //   .then(data => {
  //     console.log('上传成功', data);
  //   })
  //   .catch(err => {
  //     console.log('上传出错', err);
  //   });

    const fileName = generateUniqueFileName(files);
    // const cosKey = `upload-folder/${files.name}`; // 在COS桶中保存的文件路径
    const cosKey = `public/temp/${fileName}`; // 在COS桶中保存的文件路径

    const uploadParams = {
      Bucket: 'test-oss-1257840043',
      // Bucket: 'test-oss-1318179383',
      Region: 'ap-nanjing',
      Key: cosKey,
      // Body: files.Buffer, // 文件流
      // Body: fs.createReadStream(path.resolve(__dirname, '../static/temp/0c30a4007a491c6eada21d6ae9cc525b83019db2d03a8193f219555e633eb403.png')), // 文件流
      Body: Buffer.from(fs.readFileSync(files.path))
    };
  
    // cos.putObject(uploadParams, (err, data) => {
    //   if (err) {
    //     // console.error('Error:', err, Buffer.from(fs.readFileSync(files.path)));
    //     ctx.throw({
    //       data: null,
    //       code: 400,
    //       // message: fs.readFileSync(files.path),
    //       message: files.path,
    //       // message: fs.createReadStream(files),
    //     });
    //     // return res.status(500).send('File upload failed.');
    //   }
  
    //   console.log('File uploaded successfully.', data);
    //   // res.send('File uploaded to COS successfully.');

    //   ctx.body = {
    //     data: {
    //       files: data,
    //     },
    //     code: 200,
    //     msg: '',
    //   };
    // });

    try {
      const res = await cos.putObject(uploadParams);
      if (res.statusCode == 200) {
        ctx.body = {
          data: {
            files: [
              {
                fileName: files.name,
                path: '/public/temp/' + fileName,
                location: res.Location
              }
            ],
          },
          code: 200,
          msg: 'success',
        };
      } else {
        ctx.throw({
          code: 400,
          msg: '上传失败',
          data: null
        });
      }
    } catch (err) {
      ctx.throw({
        code: 400,
        msg: err.message,
        data: null
      });
    }
};

// 本地上传文件
const uploadFile = async (ctx, next) => {
  let files = ctx.request.files['file'];
  const fileList = [];
  if (!files.length) {
    files = [files];
  }
  for (let file of files) {
    // 创建可读流
    const reader = fs.createReadStream(file.path);
    const fileName = generateUniqueFileName(file);
    // const filePath = path.resolve(process.cwd(), './src/static/temp/') + `/${file.name}`;
    const filePath = path.resolve(process.cwd(), './src/static/temp/') + `/${fileName}`;
    fileList.push({
      path: '/public/temp/' + fileName,
      fileName: file.name,
    });
    // 创建可写流
    const upStream = fs.createWriteStream(filePath);
    // 可读流通过管道写入可写流
    reader.pipe(upStream);
  }

  ctx.body = {
    data: {
      files: fileList,
    },
    code: 200,
    msg: '',
  };
};

module.exports = {
  uploadFile: sendCos,
  sendCos
};
